package tp.pr5.mv.command;

import tp.pr5.mv.CPU;
import tp.pr5.mv.Memory;
import tp.pr5.mv.OperandStack;
import tp.pr5.mv.ProgramCounter;

public class WRITE extends Command {

	private int value1, value2; // Este comando posee dos atributos: value1 (posición de memoria) y value2 (valor a escribir en la posición de memoria)
	
	public WRITE() { // Constructor por defecto
		value1 = 0;
		value2 = 0;
	}
	
	public WRITE( int par1, int par2) { // Constructor con dos parámetros
		value1 = par1;
		value2 = par2;
	}

	
	public boolean executeCommand(Memory mem, OperandStack stack, ProgramCounter pc, CPU cpu) {
		
		boolean ok = mem.write(value1, value2); // Usamos el método write disponible en la clase Memory y devolvemos el valor del booleano que devuelve el método
		
		return ok;
	}

	public Command parse(String line) { // Parse similar al de la clase InstructionParser pero en este caso con dos parámetros

		line = line.trim();
		String[] words = line.split(" +");
		
		if ( words[0].equalsIgnoreCase( "write" ) && words.length == 3  ) {
			
			int param1 = Integer.parseInt(words[1]);
			int param2 = Integer.parseInt(words[2]);
			return new WRITE(param1,param2);
		}
		
		else return null;
		
	}
	
	
	
}
